{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# PyTorch Span \n",
    "\n",
    "参考：[SpanFillingPyTorch](https://github.com/apache/tvm/pull/14050)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## PyTorch 重命名\n",
    "\n",
    "首先对模型中 C 图指令输出的调试名称进行重命名。接着在转换过程中获取它们。与使用高层次的 IR（即 `TopLevelTracedModule`）不同，PyTorch 前端的源 IR 是 C 图实例。在某些情况下，没有唯一的源名称可供使用。因此，我们基于它们的算子类型为 C 图指令的每个输出构建唯一的名称。通过重命名调试名称，可以在转换过程中获取它们。\n",
    "\n",
    "## 导出 PyTorch C 图格式\n",
    "\n",
    "我们为用户导出 C 图的纯文本格式。选择这种格式有两个原因。\n",
    "\n",
    "- 原生 Netron 无法获取修改后的 debug 名称：考虑到最常用的可视化工具，Netron。它获取源名称的方式是[基于模块的顺序](https://github.com/lutzroeder/netron/blob/5d35a11d70997d3ca68235db27803282d5ea373d/source/pytorch.js#L579)。我们要将 C 图指令的重写名称标记为其源代码非常困难。如果不修改 Netron 的代码，我们无法通过 Netron 检查重写的名称。\n",
    "- C 图将被修改：在某些转换中，比如 QNN，C 图可能会与原始格式不同。为了给用户提供更多信息，我们决定导出修改后的图，以便用户有更多线索进行检查。\n",
    "\n",
    "与之前的其他前端相比，Pytorch 是相对困难的前端。因为在转换过程中，我们不仅要处理重命名问题和导出格式，还要处理一些更特殊的情况。\n",
    "\n",
    "参考：\n",
    "- [PreRFC in forum](https://discuss.tvm.apache.org/t/pre-rfc-tvm-explorer-infrastructure/13457/24)\n",
    "- [apache/tvm-rfcs#92](https://github.com/apache/tvm-rfcs/pull/92)\n",
    "- [#13116](https://github.com/apache/tvm/issues/13116)\n",
    "- [@haowhsu-quic](https://github.com/haowhsu-quic), [@zack-ch](https://github.com/zack-ch)\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "xin",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
